package com.txzt.gaea.upgrade.project.domain.model;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.txzt.gaea.business.project.domain.model.ProjectFundExpenseRequest;
import lombok.Data;
import org.beetl.sql.core.annotatoin.InsertIgnore;
import org.beetl.sql.core.annotatoin.Table;
import org.beetl.sql.core.annotatoin.UpdateIgnore;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

@Data
@Table(name="tb_project_main")
public class ProjectMain implements Serializable {

    private static final long serialVersionUID = 1L;

    // 基础信息
    /** 计划下发id */
    private Long id;
    /** 计划下发id */
    private Long issueId;
    /** 项目经费申请id */
    private Long ferId;
    /** 计划编号 */
    private String planNo;
    /** 项目名称 */
    private String projectName;

    // 状态信息
    /** 项目节点 */
    private Integer projectNode;
    /** 项目状态 */
    private Integer projectStatus;
    /** 全局状态 */
    private Integer globalStatus;
    /** 资料状态 */
    private Integer dataStatus;
    /** 流程状态 */
    private Integer flowStatus;

    // 流程信息
    /** 当前活跃流程id */
    private Long flowId;
    /** 开题拟制流程id */
    private Long openDraftFlowId;
    /** 开题评审流程id */
    private Long openReviewFlowId;
    /** 开题提报流程id */
    private Long openSubmitFlowId;
    /** 结题申请流程id */
    private Long finishApplyFlowId;
    /** 结题评审流程id */
    private Long finishReviewFlowId;
    /** 结题呈报流程id */
    private Long finishSubmitFlowId;
    /** 延期审核流程id */
    private Long delayId;
    /** 中止审核流程id */
    private Long stopId;

    // 主体信息
    /** 计划分类（字典值 - plan_type） */
    private String planType;
    /** 计划子类 */
    private String subType;
    /** 经费预算(元)[长度14位，精度2位] */
    private BigDecimal budgetFund;
    /** 已安排经费 */
    private BigDecimal arrangeFund;
    /** 年度经费 */
    private BigDecimal yearFund;
    /** 翌年经费 */
    private BigDecimal nextFund;
    /** 计划年度 */
    private Integer planYear;
    /** 计划开始年度 */
    private Integer startYear;
    /** 计划结束年度 */
    private Integer endYear;
    /** 研制周期(年) */
    private Integer leadTime;
    /** 负责人 */
    private Long projectLeader;
    /** 承担部门 */
    private Long departId;
    /** 研究内容 */
    private String researchContent;
    /** 项目成果 */
    private String resultForm;
    /** 任务来源 */
    private String taskSource;
    /** 任务来源说明 */
    private String taskSourceExplain;
    /** 备注 */
    private String remark;

    // 开题拟制信息
    /** 开题报告 */
    private String reportFile;
    /** 需求及目的 */
    private String demandPurpose;
    /** 国内外研究现状 */
    private String researchSituation;
    /** 研究思路及方法 */
    private String ideaMethod;
    /** 技术难点分析及解决途径 */
    private String difficultySolve;
    /** 协作单位 */
    private String coopOrg;
    /** 协作内容 */
    private String coopContent;
    /** 协作经费 */
    private String coopFund;
    /** 成果形式 */
    private String achievementForm;
    /** 经费（万元） */
    private BigDecimal fundTotal;
    /** 风险情况分析 */
    private String riskAnalysis;
    /** 成果完成形式 */
    private String completeForm;
    /** 项目安排 */
    private String projectSchedule;
    /** 费用明细 */
    private String projectCost;
    /** 经费预算 */
    private String projectExpense;
    /** 进度阶段 */
    private String projectProgress;
    /** 开题拟制批次 */
    private Long openDraftBatch;

    // 开题评审信息
    /** 会议方案 */
    private String meetingPlan;
    /** 专家名单 */
    private String expertList;
    /** 专家评审意见 */
    private String reviewOpinion;
    /** 开题材料 */
    private String openMaterial;
    /** 开题评审操作人 */
    private Long openReviewOperator;
    /** 开题评审时间 */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date openReviewTime;
    /** 开题评审批次 */
    private Long openReviewBatch;

    // 开题提报信息
    /** 开题专家评审意见 */
    private String openOpinion;
    /** 专家签字表 */
    private String signatureForm;
    /** 专家意见记录表 */
    private String opinionForm;
    /** 开题相关资料 */
    private String relatedMaterial;
    /** 开题提报操作人 */
    private Long openSubmitOperator;
    /** 开题提报时间 */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date openSubmitTime;
    /** 开题提报批次 */
    private Long openSubmitBatch;

    //结题申请信息
    /** 实际完成时间 */
    private Date actualFinishTime;
    /** 主要研究成果及应用 */
    private String resultApplication;
    /** 结题申请相关材料 */
    private String finishApplyMaterial;

    //结题评审信息
    /** 结题报告 */
    private String finishReport;
    /** 结题评审会议方案 */
    private String finishReviewMeeting;
    /** 结题专家名单 */
    private String finishExpertsList;
    /** 结题专家评审意见 */
    private String finishReviewOpinion;
    /** 结题材料 */
    private String finishReviewMaterial;
    /** 结题评审操作人 */
    private Long finishReviewOperator;
    /** 结题评审时间 */
    private Date finishReviewTime;
    /** 结题评审批次 */
    private Long finishReviewBatch;


    //结题呈报信息
    /** 结题呈报会议方案 */
    private String finishSubmitMeeting;
    /** 结题专家评审意见 */
    private String finishSubmitOpinion;
    /** 结题专家签字表 */
    private String finishSignatureForm;
    /** 结题专家意见记录表 */
    private String finishOpinionForm;
    /** 结题呈报相关资料 */
    private String finishSubmitMaterial;
    /** 结题呈报操作人 */
    private Long finishSubmitOperator;
    /** 结题呈报时间 */
    private Date finishSubmitTime;
    /** 结题呈报批次 */
    private Long finishSubmitBatch;

    /** 进度状态 */
    private String progressStatus;



    //数据元信息
    /** 提报人 */
    private Long createBy;
    /** 提报时间 */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;
    /** 更新人 */
    private Long updateBy;
    /** 更新时间 */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
    /** 提报部门 */
    private Long deptId;
    /** 是否删除 */
    private Integer isDelete;

    //前端翻译显示属性
    /** 提报人名 */
    @UpdateIgnore
    @InsertIgnore
    private String createByName;
    /** 提报部门名 */
    @UpdateIgnore
    @InsertIgnore
    private String deptName;
    /** 负责人名 */
    @UpdateIgnore
    @InsertIgnore
    private String projectLeaderName;
    /** 承担部门名 */
    @UpdateIgnore
    @InsertIgnore
    private String departName;
    /** 当前审核步骤用户 */
    @UpdateIgnore
    @InsertIgnore
    private String currentStepUserName;
    /** 当前审核状态 */
    @UpdateIgnore
    @InsertIgnore
    private String currentStatus;

    //仅请求用参数
    /** 是否提交审核 */
    @UpdateIgnore
    @InsertIgnore
    private Boolean isCheckSubmit;
    /** 项目ids(字符串，逗号分隔，例 111,222) */
    @UpdateIgnore
    @InsertIgnore
    private String ids;
    /** 项目id列表 */
    @UpdateIgnore
    @InsertIgnore
    private List<Long> idList;
    // 拟制-费用明细
    /** 拟制-经费预算 */
    @UpdateIgnore
    @InsertIgnore
    private List<ProjectExpense> expenseList;
    /** 拟制-费用明细 */
    @UpdateIgnore
    @InsertIgnore
    private List<ProjectCost> costList;
    /** 拟制-进度阶段 */
    @UpdateIgnore
    @InsertIgnore
    private List<ProjectProgress> progressList;
    /** 项目全局状态（多个逗号分隔字符串） */
    @UpdateIgnore
    @InsertIgnore
    private List<Integer> globalStatuses;

    /** 项目全局状态（多个逗号分隔字符串）(不在条件中华) */
    @UpdateIgnore
    @InsertIgnore
    private List<Integer> globalStatusesNotIn;


    /** 提报部门 */
    @UpdateIgnore
    @InsertIgnore
    private Long dept;


    /** 权限用户 */
    @UpdateIgnore
    @InsertIgnore
    private Long permissionUser;

    /** 权限部门 */
    @UpdateIgnore
    @InsertIgnore
    private Long permissionDept;

    /** 当前登录用户 */
    @UpdateIgnore
    @InsertIgnore
    private Long currentUser;

    /** 是否可审核 */
    @UpdateIgnore
    @InsertIgnore
    private Boolean isCheck;
    
    /** 是否可撤回 */
    @UpdateIgnore
    @InsertIgnore
    private Boolean isRevocation;

    /** 是否可撤回流程 */
    @UpdateIgnore
    @InsertIgnore
    private Boolean isFlowRevocation;

    /** 经费申请 */
    @UpdateIgnore
    @InsertIgnore
    private ProjectFundExpenseRequest fer;

    /** 经费预算编号 */
    @UpdateIgnore
    @InsertIgnore
    private String ferNo;

    /** 外协合作数量 */
    @UpdateIgnore
    @InsertIgnore
    private Integer coopNum;

    /** 实际支出经费 */
    @UpdateIgnore
    @InsertIgnore
    private BigDecimal actualExpense;

    /** 当前审批用户 */
    @UpdateIgnore
    @InsertIgnore
    private Long currentStepMember;
}
